package JackSu.多线程;


class sellTicketThread extends Thread {
    /**
     * 解决线程安全问题
     * 1.同步代码块
     *
     * 2.同步方法
     */

    private static int ticket = 100;
            public  static   Object obj=new Object();
//    //共享锁解决竞争同一张票的问题
//    private static boolean ifSell = true;

    @Override
    public void run() {

            while (true) {
//                synchronized (sellTicketThread.class) y也可以用当前类来充当对象，并且这个对象只会加载一次，其他的其实都是他的拷贝
                synchronized (obj) {
                if (ticket > 0){

                    //                    sleep(1000);  在这个位置堆积时会出现错票 0， -1
                    System.out.println(Thread.currentThread().getName() + "票号为：" + ticket);
                    try {
                        //当在这个时候产生堆积的时候，重票的可能行就会比较高
                        sleep(10);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    ticket--;

                }else break;

            }

        }

    }
}

public class _02三个窗口卖票 {

    public static void main(String[] args) {
        sellTicketThread t1 = new sellTicketThread();
        sellTicketThread t2 = new sellTicketThread();
        sellTicketThread t3 = new sellTicketThread();
        t1.setName("窗口1");
        t2.setName("窗口2");
        t3.setName("窗口3");
        t1.start();
        t2.start();
        t3.start();
    }
}
